#include "LoginWindow.h"
#include "ui_LoginWindow.h"

#include "windows.h"

using namespace std;

extern QSqlDatabase enjoylifedb;

//QSqlDatabase enjoylifedb = QSqlDatabase::addDatabase("QPSQL");
FILE *leerArch;
QString host;
QString current_user;

QString user_pablo = "Pablo";
QString user_lucas = "Lucas";
QString user_diego = "Diego";
QString user_postgres = "postgres";

LoginWindow::LoginWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LoginWindow)
{
    ui->setupUi(this);

//    enjoylifedb = QSqlDatabase::addDatabase("QPSQL");

    /*
    Se elimina el borde de la ventana. Para quitar los otros botones,
    mirar las opciones de http://doc.qt.digia.com/4.6/widgets-windowflags.html
    */
    setWindowFlags(Qt::FramelessWindowHint);

    ui->signin_btn->setEnabled(false);

    // Se le da acción al botón cancelar.
    connect(ui->cancel_btn,SIGNAL(clicked()),this,SLOT(close()));
    // Cuando se ingresa el nombre de usuario (!= null), se habilita el botón Entrar.
    connect(ui->user,SIGNAL(textChanged(const QString&)),this,SLOT(enable_signing_btn(const QString&)));
    // Una vez escrita la contraseña se puede apretar enter para iniciar
    connect(ui->password,SIGNAL(returnPressed()),this,SLOT(PressEnter()));

    ui->user->setFocus();
}

LoginWindow::~LoginWindow()
{
    delete ui;
    enjoylifedb.close();
}

void LoginWindow::enable_signing_btn(const QString &text)
{
    ui->signin_btn->setEnabled(!text.isEmpty());
}

void LoginWindow::on_signin_btn_clicked()
{
    if (ui->user->text() != user_pablo && ui->user->text() != user_lucas && ui->user->text() != user_postgres
            && ui->user->text() != user_diego) {
        QMessageBox::critical(this,"Advertencia","El usuario es incorrecto. Intente nuevamente");
        return;
    }
    username = ui->user->text();
    current_user = username;
    enjoylifedb.setUserName(username);
    enjoylifedb.setPassword(ui->password->text());
    enjoylifedb.setConnectOptions();

    SchemaDB *sch = NULL;

    if (! enjoylifedb.open()) {
        ShowCriticalError(enjoylifedb.lastError().text());
        return;
    }

    if (! sch->CreateSchemaDB())
        return;

    close(); // Se cierra la ventana de login.
    MainWindows* main_win = new MainWindows(0,username,host,5432);
    main_win->show(); // Se lanza la ventana principal.
}

/**
 * @brief LoginWindow::PressEnter
 */
void LoginWindow::PressEnter()
{
    if (ui->user->text() != user_pablo && ui->user->text() != user_lucas && ui->user->text() != user_postgres
            && ui->user->text() != user_diego) {
        QMessageBox::critical(this,"Advertencia","El usuario es incorrecto. Intente nuevamente");
        return;
    }
    username = ui->user->text();
    current_user = username;
    enjoylifedb.setUserName(username);
    enjoylifedb.setPassword(ui->password->text());
    enjoylifedb.setConnectOptions();

    SchemaDB *sch = NULL;

    if (! enjoylifedb.open()) {
        ShowCriticalError(enjoylifedb.lastError().text());
        return;
    }

    if (! sch->CreateSchemaDB())
        return;

    close(); // Se cierra la ventana de login.
    MainWindows* main_win = new MainWindows(0,username,host,5432);
    main_win->show(); // Se lanza la ventana principal.
}

/**
 * Lee un archivo de configuración para obtener el host donde se aloja la base de datos.
 */
void LoginWindow::LeerArchivoConf()
{
    QString archivo = qApp->applicationDirPath();
    archivo.append("/EnjoyLife.conf");
    QFile file(archivo);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QMessageBox::critical(this,"Error crítico","No se puede leer el archivo de configuración. Intente nuevamente");
        return;
    }

    QTextStream in(&file);
    while (!in.atEnd()) {
        QString linea = in.readLine();
        // Procesamiento de la linea leida
        for (int i = 0; i < linea.size(); ++i) {
            if (i > 5) {
                host.append(linea[i]);
            }
        }
    }

    //close the file
    file.close();
}

/**
* Muestra el mensaje de error en caso de producirse uno de ellos. Toma como parametro
* un texto que es el detalle de la información del mensaje.
*/
void LoginWindow::ShowCriticalError(const QString &text)
{
    QMessageBox msg;
    msg.setStyleSheet("background-color: rgb(0, 139, 56);color: rgb(255, 255, 255);font: 12pt \"Helvetica57-Condensed\";border-style: solid");
    msg.setIcon(QMessageBox::Critical);
    msg.setText("Se ha producido un error. Por favor, intente nuevamente.");
    msg.setDetailedText(text);
    msg.addButton("Cerrar",QMessageBox::AcceptRole);
    msg.setWindowTitle("Alerta!");
    msg.exec();
}

void LoginWindow::on_face_btn_clicked()
{
    QDesktopServices::openUrl(QUrl("https://www.facebook.com/enjoylifeweb"));
}

void LoginWindow::on_google_btn_clicked()
{
    QDesktopServices::openUrl(QUrl("https://plus.google.com/117989872690669031648"));
}

void LoginWindow::on_enjoy_btn_clicked()
{
    QDesktopServices::openUrl(QUrl("http://enjoy-life.com.ar/"));
}

void LoginWindow::on_siti_btn_clicked()
{
    QDesktopServices::openUrl(QUrl("http://www.sitisoft.com.ar/"));
}

void LoginWindow::on_skype_btn_clicked()
{
    ShellExecute(NULL, TEXT("open"), TEXT("C:/PROGRA~2/Skype/Phone/Skype.exe"), NULL, NULL, SW_SHOWNORMAL);
}

void LoginWindow::on_mail_btn_clicked()
{
//    ShellExecute(NULL, TEXT("open"), TEXT("C:/PROGRA~2/Mozilla Thunderbird/thunderbird.exe"), NULL, NULL, SW_SHOWNORMAL);
    QString cuerpoMail = "Enviado desde sistema Enjoy Life\n";
    QString archivoAdjunto;
    archivoAdjunto = QFileDialog::getOpenFileName(this,tr("Abrir archivo"), QDir::currentPath());
//    QDesktopServices::openUrl(QUrl("mailto:informatica@enjoylife.com.ar?subject=Probando&body=Probando mail enviado desde Sistema Enjoy Life\n&attachments="+fileName));
    QDesktopServices::openUrl(QUrl("mailto:informatica@enjoylife.com.ar.com?subject=Probando&body='"+cuerpoMail+"&attach='file:///"+archivoAdjunto+"'"));

}
